#ifndef FIXTURE_H
#define FIXTURE_H

#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>

#include "codigos_print.h"
#include "lista.h"
#include "jugador.h"
#include "equipo.h"
#include "partido.h"

typedef struct fixture fixture_t;

/**********************************************************************
*						FUNCIONES FIXTURE
***********************************************************************/
/*
*Post: Crea una estructura del tipo fixture_t*/
fixture_t *fixture_crear(void);

/*Post: Destruye una estructura del tipo fixture_T*/
void fixture_destruir(fixture_t *fixture);

/*
*Crea un estructura del tipo equiop_t y lo almacena en fixture.
*Post: Devuelve EXITO si el proceso se llevo a cabo*/
error_code fixture_agregar_equipo(fixture_t *fixture, const char *nombre);

/*
*Crea una estructura del tipo jugador_t y lo almacena en fixtura.
*Almacena el nombre del jugador en una estructura del tipo 
*equipo_t asociado al nombre del equipo pasado por parametro.
*Post: Devuelve EXITO si el proceso se llevo a cabo.*/
error_code fixture_agregar_jugador(fixture_t *fixture, const char *equipo, const char *nombre);

/*
*Carga los datos del archivo file en fixture.
*Post: Devuelve EXITO si el proceso se llevo a cabo.*/
error_code fixture_cargar (fixture_t* fixture, FILE *file);

/*
*Post: Devuleve un dato del tipo jugador_t asociado a la cadena 
*de caracteres jugador.
*Devuelve NULL si el dato jugador no existe o si fixture no existe.*/
jugador_t* fixture_obtener_jugador (fixture_t* fixture, const char* jugador);

/*
*Post: Devuelve un dato del tipo equipo_t asociado a la cadena de
*de caracteres equipo. 
*Devuelve NULL si el dato equipo no existe o si fixture no existe.*/
equipo_t* fixture_obtener_equipo (fixture_t* fixture,const char* equipo);

/*
*Post: Devuelve un dato del tipo partido_t asociado a la cadena 
*de caracteres idr.
*Devuelve NULL si el idr es invalido o no existe o si dessea
*acceder a un dato invalido.*/
partido_t* fixture_obtener_partido (fixture_t* fixture, char* idr_partido);

/*
*Actualiza, si es necesario, los datos del goleador hasta el
*momento.*/
void fixture_actualizar_goleador (fixture_t* fixture, jugador_t* jugador);

/*
*Post: Devuelve un dato del tipo jugador_t asociado al jugador
*que anoto la mayor cantidad de goles hasta el momento.*/
jugador_t* fixture_obtener_goleador (fixture_t* fixture);
/**********************************************************************
*						COMANDOS PRINCIPALES
***********************************************************************/

void agregar_resultado (fixture_t* fixture, lista_t* parametros);

void listar_jugadores (fixture_t* fixture, lista_t* parametros);

void listar_goleador(fixture_t* fixture, lista_t* parametros);

void goles_jugador (fixture_t* fixture, lista_t* parametros);

void mostrar_resultado (fixture_t* fixture, lista_t* parametros);
#endif
